﻿// namespace ConsoleApplication{
//     // 1.声明一个委托
//     delegate void PrintDelegate();
//     delegate int InputDelegate(int num);
//
//     class Program{
//         static void Main(string[] args) {
//             // 2.使用委托，使用new关键字
//             var printDelegate = new PrintDelegate(Print1);
//             printDelegate(); // 调用委托
//             
//             // 可以将多个方法绑定到同一个委托
//             printDelegate += Print2;
//             printDelegate(); // 会依次调用Print1和Print2
//
//             var inputDelegate = new InputDelegate(Print3);
//             var inputResult = inputDelegate(3);
//             Console.WriteLine(inputResult);
//         }
//
//         static void Print1() {  // 修正拼写并添加static修饰符
//             Console.WriteLine("Print1");
//         }
//
//         static void Print2() {  // 修正拼写并添加static修饰符
//             Console.WriteLine("Print2");
//         }
//
//         static int Print3(int num) {
//             return ++num;
//         }
//     }
// }

// 我们为什么需要委托？？？？
// namespace cs_advance_01{
//     delegate void CallBack();
//     class Program{
//         static void Main(string[] args) {
//             var claaBack = new CallBack(CallBackJob1);
//             UseCallBack(claaBack);
//         }
//
//         static void UseCallBack(CallBack callBack) {
//             Thread.Sleep(1);
//             callBack?.Invoke();
//         }
//         
//         static void CallBackJob1() {
//             Console.WriteLine("CallBackJob1");
//         }
//
//         static void CallBackJob2() {
//             Console.WriteLine("CallBackJob2");
//         }
//     }
// }
// namespace cs_advance_01{
//     delegate void CallBack();
//     class Program{
//         static void Main(string[] args) {
//             UseCallBack(CallBackJob1);
//         }
//
//         static void UseCallBack(CallBack callBack) {
//             Thread.Sleep(1);
//             callBack?.Invoke();
//         }
//         
//         static void CallBackJob1() {
//             Console.WriteLine("CallBackJob1");
//         }
//
//         static void CallBackJob2() {
//             Console.WriteLine("CallBackJob2");
//         }
//     }
// }

// 多播委托
// namespace cs_advance_01{
//     delegate void CallBack();
//     class Program{
//         static void Main(string[] args) {
//             var claaBack = new CallBack(CallBackJob1);
//             //-----------------------
//             claaBack += CallBackJob2;
//             //------------------------
//             UseCallBack(claaBack);
//         }
//
//         static void UseCallBack(CallBack callBack) {
//             Thread.Sleep(1);
//             callBack?.Invoke();
//         }
//         
//         static void CallBackJob1() {
//             Console.WriteLine("CallBackJob1");
//         }
//
//         static void CallBackJob2() {
//             Console.WriteLine("CallBackJob2");
//         }
//     }
// }


// 两个内部的委托Action和Func,这两个委托都是泛型
// namespace cs_advance_01{
//     class Program{
//         static void Main(string[] args) {
//             Action print = Print1;
//             print+=Print2;
//             print();
//         }
//
//         static void Print1() {
//             Console.WriteLine("Print1");
//         }
//         static void Print2() {
//             Console.WriteLine("Print2");
//         }
//     }
//     
// }
//
namespace cs_advance_01{
    class Program{
        static void Main(string[] args) {
            Action callback = CallBack1;
            Work(callback);
        }

        static void Work(Action action) {
            
        }
        // 回调函数
        static void CallBack1() {
            Console.WriteLine("CallBack1");
        }

        static void CallBack2() {
            Console.WriteLine("CallBack2");
        }
    }
    
}





























